package com.kexio.scheduler.service;

import java.util.List;
import java.util.Map;

import com.kexio.common.dto.Result;
import com.kexio.scheduler.entity.ScheduledJob;

/**
 * 调度服务接口
 * 
 * @author Kexio Team
 * @since 1.0.0
 */
public interface SchedulerService {
    
    /**
     * 添加定时任务
     * 
     * @param job 任务信息
     * @return 添加结果
     */
    Result<Boolean> addJob(ScheduledJob job);
    
    /**
     * 更新定时任务
     * 
     * @param job 任务信息
     * @return 更新结果
     */
    Result<Boolean> updateJob(ScheduledJob job);
    
    /**
     * 删除定时任务
     * 
     * @param jobId 任务ID
     * @return 删除结果
     */
    Result<Boolean> deleteJob(String jobId);
    
    /**
     * 启动任务
     * 
     * @param jobId 任务ID
     * @return 启动结果
     */
    Result<Boolean> startJob(String jobId);
    
    /**
     * 暂停任务
     * 
     * @param jobId 任务ID
     * @return 暂停结果
     */
    Result<Boolean> pauseJob(String jobId);
    
    /**
     * 恢复任务
     * 
     * @param jobId 任务ID
     * @return 恢复结果
     */
    Result<Boolean> resumeJob(String jobId);
    
    /**
     * 立即执行任务
     * 
     * @param jobId 任务ID
     * @return 执行结果
     */
    Result<Boolean> executeJob(String jobId);
    
    /**
     * 获取任务信息
     * 
     * @param jobId 任务ID
     * @return 任务信息
     */
    ScheduledJob getJob(String jobId);
    
    /**
     * 获取所有任务
     * 
     * @return 任务列表
     */
    List<ScheduledJob> getAllJobs();
    
    /**
     * 根据状态获取任务
     * 
     * @param status 任务状态
     * @return 任务列表
     */
    List<ScheduledJob> getJobsByStatus(String status);
    
    /**
     * 根据分组获取任务
     * 
     * @param jobGroup 任务分组
     * @return 任务列表
     */
    List<ScheduledJob> getJobsByGroup(String jobGroup);
    
    /**
     * 获取调度器状态
     * 
     * @return 调度器状态
     */
    Map<String, Object> getSchedulerStatus();
    
    /**
     * 启动调度器
     * 
     * @return 启动结果
     */
    Result<Boolean> startScheduler();
    
    /**
     * 停止调度器
     * 
     * @return 停止结果
     */
    Result<Boolean> stopScheduler();
    
    /**
     * 暂停调度器
     * 
     * @return 暂停结果
     */
    Result<Boolean> pauseScheduler();
    
    /**
     * 恢复调度器
     * 
     * @return 恢复结果
     */
    Result<Boolean> resumeScheduler();
    
    /**
     * 获取任务统计信息
     * 
     * @return 统计信息
     */
    Map<String, Object> getJobStatistics();
    
    /**
     * 清理过期的执行记录
     * 
     * @param days 保留天数
     * @return 清理数量
     */
    int cleanExpiredExecutions(int days);
}
